package cn.zyx.common.entity;

import cn.zyx.common.utils.ReflectionsUtils;
import com.google.common.collect.Lists;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 数据Entity类
 * @author zyx
 * callSuper = false（默认）：只比较子类的字段，不调用父类的 equals() 和 hashCode() 方法。
 * callSuper = true：同时调用父类的 equals() 和 hashCode() 方法，确保继承的父类字段也被比较。
 */
@EqualsAndHashCode(callSuper = true)
@Data
public abstract class TreeEntity<T> extends DataEntity<T> {

	private static final long serialVersionUID = 1L;

	// 父级编号  protected 同一个包,或者子类可以访问
	protected T parent;
	// 所有父级编号
	protected String parentIds;
	// 名称
	protected String name;
	// 排序
	protected Integer sort;

	private List<T> children = Lists.newArrayList();    // 父级菜单

	public TreeEntity() {
		super();
		this.sort = 30;
	}

	public TreeEntity(String id) {
		super(id);
		this.sort = 30;
	}

	/**
	 * 父对象，只能通过子类实现，父类实现mybatis无法读取
	 */
	public abstract T getParent();

	/**
	 * 父对象，只能通过子类实现，父类实现mybatis无法读取
	 */
	public abstract void setParent(T parent);


	public String getParentId() {
		String id = null;
		if (parent != null) {
			id = (String) ReflectionsUtils.getFieldValue(parent, "id");
		}
		return StringUtils.isNotBlank(id) ? id : "0";
	}



}
